<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box{width: 300px;height: 400px;border: solid 1px black;margin: 0 auto;}
        .box .msg{height: 300px;border-bottom: solid 1px black;overflow: auto;}
        .msg div{padding: 6px;border-radius: 6px;margin: 6px;max-width: 200px;clear: both;}
        .msg div:nth-child(2n){background: #99f;float: left;}
        .msg div:nth-child(2n-1){background: #6f6;float: right}
    </style>
</head>
<body>
    <div class="box">
        <div class="msg">
        </div>
        <div class="form">
            <textarea id="txt"></textarea>
            <input type="button" id="btn" value="发送">
        </div>
    </div>
</body>
<script>
    var omsg = document.querySelector(".msg")
    var otxt = document.getElementById("txt")
    var obtn = document.getElementById("btn")

    obtn.onclick = function(){
        send();
    }
    otxt.onkeydown = function(eve){
        var e = eve || window.event;
        var code = e.keyCode || e.which;

        // 功能键的单独判断方式，一般用来做组件键
        // console.log(e.ctrlKey);
        // console.log(e.shiftKey);
        // console.log(e.altKey);
        // console.log(e.metaKey);

        if(code === 13 && e.ctrlKey){
            send();
        }
    }


    function send(){
        // 如果输入框为空，立即结束
        if(otxt.value === "") return;
        // 创建元素
        var div = document.createElement("div");
        // 设置内容
        div.innerHTML = otxt.value;
        // 插入到指定父级
        omsg.appendChild(div);
        // 清空输入框
        otxt.value = "";
        // 设置容器的滚动距离为，自身的总高度，保证最新消息显示在可视区域内
        omsg.scrollTop = omsg.scrollHeight;
    }

</script>
</html>